﻿#region 참조 네임스페이스

using System;
using System.ComponentModel;

#endregion

namespace Skying.ComponentModel
{
	public class AsyncResultEventArgs<T> : AsyncCompletedEventArgs
	{
		#region 변수

		/// <summary>
		/// 비동기 동작에 대한 결과를 나타낸다.
		/// </summary>
		private T _result;

		#endregion

		#region 프로퍼티

		/// <summary>
		/// 비동기 동작에 대한 결과를 가져온다. 반환 값은 null일 수 있다.
		/// </summary>
		public T Result
		{
			get
			{
				if (this._result == null) return default(T);

				base.RaiseExceptionIfNecessary();

				return this._result;
			}
		}

		#endregion

		#region 생성자/소멸자

		public AsyncResultEventArgs(T result, Exception error, bool cancelled, object userState)
			: base(error, cancelled, userState)
		{
			this._result = result;
		}

		public AsyncResultEventArgs(T result)
			: this(result, null, false, null)
		{

		}

		public AsyncResultEventArgs(Exception error)
			: this(default(T), error, false, null)
		{

		}

		#endregion
	}
}